import os
import shutil
import pandas as pd
import numpy as np

import argparse

"""
    计算气动力
"""

# 数据集名称
dataset = "CST_20"

# 气动力保存路径
cp_dir = os.path.join(r"/home/linjx/data/cp/", dataset)

# 待计算气动力的数据集
dataset_dir = r"/home/linjx/data/dataset/UIUC_AND_NACA_" + dataset


def excute(name, af_file_list=None):
    """
        执行foilFlow程序
    :param name: 翼型名称
    :return:
    """
    # af_file_list 默认值
    if af_file_list is None:
        af_file_list = ["foil_cf.dat", "foil_clcdcm.dat", "foilCp.dat", "foilField.dat"]

    # 执行foilFlow程序
    os.system('~/bin/foilFlow')

    # 气动力所保存的文件夹不存在，则新建文件夹
    if not os.path.exists(os.path.join(cp_dir, name)):
        os.mkdir(os.path.join(cp_dir, name))

    af_dir = os.path.join(cp_dir, name)

    # 把算出来的气动力拷贝到af_dir文件夹下
    for af_file in af_file_list:
        shutil.copy(af_file, os.path.join(af_dir, af_file))


def loop(reverse=False):
    """
        遍历dataset_dir文件夹下所有的翼型文件，并计算气动力
    :param reverse: 是否反转
    :return:
    """
    count = 1
    for file_name in os.listdir(dataset_dir):
        # 读出翼型坐标
        df = pd.read_csv(os.path.join(dataset_dir, file_name))
        if reverse:
            df = np.asarray(df)[::-1]
        else:
            df = np.asarray(df)

        # 要计算气动力，我们需要把把翼型坐标写入到para/foil.dat以及para/foilGeom.dat中
        np.savetxt("../para/foil.dat", df)
        np.savetxt("../para/foilGeom.dat", df)

        print("{}:cal {}...  ".format(count, file_name[:-4]))
        excute(file_name[:-4]) # 执行气动力计算程序
        print("done!")
        count += 1


if __name__ == "__main__":

    if not os.path.exists(cp_dir):
        os.mkdir(cp_dir)

    # 读出数据集名称
    parser = argparse.ArgumentParser(description='数据集名称')
    parser.add_argument('--datasetName', '-d', type=str, required=True, default='', help='数据集名称')
    args = parser.parse_args()
    dataset = args.datasetName

    loop()

